/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    hlw8012.h
  * @brief   Header file for HLW8012 power monitoring IC driver
  ******************************************************************************
  */
/* USER CODE END Header */

#ifndef HLW8012_H
#define HLW8012_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"
#include "cmsis_os.h"

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/
// HLW8012电压转换系数
// 根据规格书，CF1引脚输出频率与电压有效值成正比
// 计算公式：Vrms = (CF1频率 * 3259.2) / 1000
// 3259.2为校准系数，根据实际电路调整
#define HLW8012_VOLTAGE_FACTOR    0.34375f  // 电压转换系数：Vrms = 频率 * 3.2592
#define HLW8012_MEASUREMENT_INTERVAL_MS 1000  // 测量间隔1秒
#define HLW8012_SAMPLE_DURATION_MS 100  // 采样持续时间100毫秒
#define HLW8012_VOLTAGE_RANGE_MIN 1.0f   // 电压测量范围最小值(V)
#define HLW8012_VOLTAGE_RANGE_MAX 900.0f  // 电压测量范围最大值(V)

/* Exported macro ------------------------------------------------------------*/

/* Exported functions prototypes ---------------------------------------------*/
void HLW8012_Init(void);
void HLW8012_EnableInterrupt(void);
void HLW8012_DisableInterrupt(void);
float HLW8012_ReadVoltage(void);
void HLW8012_MeasurementTask(void *argument);

/* External variables --------------------------------------------------------*/
extern volatile uint32_t hlw8012_voltage_count;
extern volatile uint32_t hlw8012_last_time;
extern float input_voltage;

extern osThreadId_t hlw8012TaskHandle;

#ifdef __cplusplus
}
#endif

#endif /* HLW8012_H */